# -*- coding: utf-8 -*-
# Version: Python 3.9.7
# Author: TRIX
# Date: 2021-09-14 21:34:14
# Use:自动上传代码文章到 知乎 思否 CSDN 简书  博客园 由于该程序部分代码只适配于作者的硬件和软件 部分快捷键为作者自定义 在对代码修改前 请勿随意运行该程序 文章配置要求文件 ArticleConfig.txt

#使用之前 先配置 NoteConfig.txt 且保证网络正常 如果程序出错 鼠标移动到屏幕左上角停止程序运行

from pyautogui import *
from time import sleep
import pyperclip

def uploadToZhihu(title,codeLanguage,codeFile,codeDemoDisplay,codeDemoSite,codeDisplay,codeSite,delay,mode):
	sleep(0.5+delay)
	click(1440,140)#点击个人网站
	click(1766,400,button='right')#选择知乎上传文章页面
	click(1556,244)#在新页面打开
	hotkey('ctrl','pgdn')#切换到上传页面
	sleep(2.5+delay)

	#编辑标题
	click(1057,645)#进入标题编辑区域
	pyperclip.copy(title)#复制标题到剪贴板
	hotkey('ctrl','v')#粘贴标题
	click(262,603)#退出标题编辑区域

	#编辑文章内容
	sleep(0.5+delay)
	hotkey('ctrl','end')#移动到编辑页面尾部
	typewrite(['up','up'])#向上滚动两格
	click(1235,700)#进入文章内容编辑区域

	#编辑代码演示链接
	sleep(1+delay)
	hotkey('ctrl','k')#插入链接
	click(851,551)#编辑链接显示文本
	pyperclip.copy(codeDemoDisplay)#复制链接显示文本
	hotkey('ctrl','v')#粘贴文本
	click(925,620)#编辑链接
	pyperclip.copy(codeDemoSite)#复制链接
	hotkey('ctrl','v')#粘贴链接
	click(1090,730)#点击确认
	sleep(0.5+delay)
	press('enter')#换行

	#编辑代码源码链接
	sleep(1+delay)
	hotkey('ctrl','k')#插入链接
	click(851,551)#编辑链接显示文本
	pyperclip.copy(codeDisplay)#复制链接显示文本
	hotkey('ctrl','v')#粘贴文本
	click(925,620)#编辑链接
	pyperclip.copy(codeSite)#复制链接
	hotkey('ctrl','v')#粘贴链接
	click(1090,730)#点击确认
	sleep(0.5+delay)
	press('enter')#换行

	#编辑代码片段
	sleep(0.5+delay)
	hotkey('ctrl','alt','c')#插入代码片段
	sleep(0.5+delay)
	pyperclip.copy(codeLanguage)#复制代码语言到剪贴板
	click(1255,570,duration=0.5)#选择代码语言
	hotkey('ctrl','v')#粘贴
	press('enter')#确认
	click(850,570)#进入编辑代码区域
	pyperclip.copy(codeFile)#复制代码文件到剪贴板
	hotkey('shift','alt','s')#选择文件快捷键
	hotkey('ctrl','v')#粘贴
	press('enter')#确认
	sleep(1.5+delay)
	click(930,420)
	hotkey('ctrl','a')#全选
	hotkey('ctrl','c')#复制
	sleep(0.5+delay)
	click(160,1060)#点击浏览器
	hotkey('ctrl','v')#粘贴

	#发布
	sleep(0.5+delay)
	click(1505,208)#点击发布
	sleep(1+delay)
	x,y=locateCenterOnScreen('nextZhihu.jpg',region=(1509,837,1659-1509,1029-837),confidence=0.7)#识别下一步按钮 region(x,y,weight,height) confidence识别精度0-1
	if x in [nx for nx in range(1586,1592)] and y in [ny for ny in range(875,881)]:#如果知乎没有自动添加话题
		click(1348,444)#进入话题编辑区域
		pyperclip.copy(codeLanguage)#复制代码语言到剪贴板
		hotkey('ctrl','v')#粘贴
		click(1314,509)#添加话题
		sleep(0.5+delay)
	click(x,y)#点击下一步
	sleep(0.5+delay)
	click(1601,638)#添加到PythonPrimaryProgram专栏
	sleep(0.5+delay)
	if mode=='upload':
		click(1586,763)#点击确定 发布文章
	elif mode=='test':
		click(1251,769)#返回

def uploadToSifou(title,codeLanguage,codeFile,codeDemoDisplay,codeDemoSite,codeDisplay,codeSite,delay,mode):
	sleep(0.5+delay)
	click(1440,140)#点击个人网站
	click(1739,458,button='right')#选择思否上传文章页面
	click(1381,245)#在新页面打开
	hotkey('ctrl','pgdn')#切换到上传页面
	sleep(2.5+delay)

	#编辑标题
	click(479,328)#进入标题编辑区域
	pyperclip.copy(title)#复制标题到剪贴板
	hotkey('ctrl','v')#粘贴标题
	sleep(0.5+delay)

	#编辑标签
	click(91,407)#点击添加标签
	pyperclip.copy(codeLanguage)#复制代码语言到剪贴板
	hotkey('ctrl','v')#粘贴
	sleep(2+delay)
	press('enter')#确认

	#编辑文章内容
	sleep(0.5+delay)
	click(122,984)#进入编辑文章内容

	#编辑代码演示链接
	sleep(0.5+delay)
	pyperclip.copy(codeDemoDisplay)#复制链接显示文本
	typewrite('[')#链接显示文本标识符
	hotkey('ctrl','v')#粘贴文本
	typewrite(']')
	pyperclip.copy(codeDemoSite)#复制链接
	typewrite('(')#链接标识符
	hotkey('ctrl','v')#粘贴文本
	typewrite(')')
	sleep(0.5+delay)
	press('enter')#换行

	#编辑代码源码链接
	sleep(0.5+delay)
	pyperclip.copy(codeDisplay)#复制链接显示文本
	typewrite('[')#链接显示文本标识符
	hotkey('ctrl','v')#粘贴文本
	typewrite(']')
	pyperclip.copy(codeSite)#复制链接
	typewrite('(')#链接标识符
	hotkey('ctrl','v')#粘贴文本
	typewrite(')')
	sleep(0.5+delay)
	press('enter')#换行

	#编辑代码片段
	pyperclip.copy(codeLanguage)#复制代码语言到剪贴板
	typewrite('```')#代码片段标识符
	hotkey('ctrl','v')#粘贴
	press('enter')#换行
	sleep(0.5+delay)
	pyperclip.copy(codeFile)#复制代码文件到剪贴板
	hotkey('shift','alt','s')#选择文件快捷键
	hotkey('ctrl','v')#粘贴
	press('enter')#确认
	sleep(1.5+delay)
	click(930,420)
	hotkey('ctrl','a')#全选
	hotkey('ctrl','c')#复制
	sleep(0.5+delay)
	click(160,1060)#点击浏览器
	hotkey('ctrl','v')#粘贴
	hotkey('ctrl','end')#跳转到文本尾部
	press('enter')#换行
	typewrite('```')#代码片段标识符

	#发布
	sleep(0.5+delay)
	click(1800,215)#点击发布
	sleep(1+delay)
	buttonPos=locateCenterOnScreen('buttonSifou.jpg',region=(1430,745,68,50),confidence=0.8)#思否按钮图标 region(x,y,weight,height) confidence识别精度0-1
	if buttonPos:#如果没有注明版权
		click(1462,771)#点击注明版权

	if mode=='upload':
		click(1660,887)#点击确定 发布文章
	elif mode=='test':
		click(1750,1000)#取消

def uploadToCSDN(title,codeLanguage,codeFile,codeDemoDisplay,codeDemoSite,codeDisplay,codeSite,delay,mode):
	sleep(0.5+delay)
	click(1440,140)#点击个人网站
	click(1739,500,button='right')#选择CSDN上传文章页面
	click(1400,245)#在新页面打开
	hotkey('ctrl','pgdn')#切换到上传页面
	sleep(2.5+delay)

	#编辑标题
	click(610,208)#进入标题编辑区域
	pyperclip.copy(title)#复制标题到剪贴板
	hotkey('ctrl','a')#全选
	press('backspace')#删除原有文字
	hotkey('ctrl','v')#粘贴标题
	sleep(0.5+delay)

	#编辑文章内容
	sleep(0.5+delay)
	click(215,476)#进入编辑文章内容区域
	hotkey('ctrl','a')#全选
	press('backspace')#删除原有文字

	#编辑代码演示链接
	sleep(0.5+delay)
	pyperclip.copy(codeDemoDisplay)#复制链接显示文本
	typewrite('[')#链接显示文本标识符
	hotkey('ctrl','v')#粘贴文本
	typewrite(']')
	pyperclip.copy(codeDemoSite)#复制链接
	typewrite('(')#链接标识符
	hotkey('ctrl','v')#粘贴文本
	typewrite(')')
	sleep(0.5+delay)
	press('enter')#换行

	#编辑代码源码链接
	sleep(0.5+delay)
	pyperclip.copy(codeDisplay)#复制链接显示文本
	typewrite('[')#链接显示文本标识符
	hotkey('ctrl','v')#粘贴文本
	typewrite(']')
	pyperclip.copy(codeSite)#复制链接
	typewrite('(')#链接标识符
	hotkey('ctrl','v')#粘贴文本
	typewrite(')')
	sleep(0.5+delay)
	press('enter')#换行

	#编辑代码片段
	pyperclip.copy(codeLanguage)#复制代码语言到剪贴板
	typewrite('```')#代码片段标识符
	hotkey('ctrl','v')#粘贴
	press('enter')#换行
	sleep(0.5+delay)
	pyperclip.copy(codeFile)#复制代码文件到剪贴板
	hotkey('shift','alt','s')#选择文件快捷键
	hotkey('ctrl','v')#粘贴
	press('enter')#确认
	sleep(1.5+delay)
	click(930,420)
	hotkey('ctrl','a')#全选
	hotkey('ctrl','c')#复制
	sleep(0.5+delay)
	click(160,1060)#点击浏览器
	hotkey('ctrl','v')#粘贴
	hotkey('ctrl','end')#跳转到文本尾部
	press('enter')#换行
	typewrite('```')#代码片段标识符

	#发布
	sleep(0.5+delay)
	click(1717,212)#点击发布文章
	sleep(1+delay)

	#编辑标签
	click(640,567)#点击添加文章标签
	pyperclip.copy(codeLanguage)#复制代码语言到剪贴板
	click(760,688)#点击添加标签
	hotkey('ctrl','v')#粘贴
	sleep(0.5+delay)
	press('enter')#确认
	click(500,750)#退出添加文章标签
	sleep(0.5+delay)
	click(615,750)#添加到PythonPrimaryProgram专栏
	click(588,950)#点击原创
	typewrite(['down','down'])#向下滚动2格
	if mode=='upload':
		click(1400,973)#点击发布文章
	elif mode=='test':
		click(1162,972)#取消

def uploadToJianshu(title,codeLanguage,codeFile,codeDemoDisplay,codeDemoSite,codeDisplay,codeSite,delay,mode):
	sleep(0.5+delay)
	click(1440,140)#点击个人网站
	click(1739,555,button='right')#选择简书上传文章页面
	click(1400,245)#在新页面打开
	hotkey('ctrl','pgdn')#切换到上传页面
	sleep(2.5+delay)

	#选择文集
	click(160,383)#选择 PythonPrimaryProgram 文集
	sleep(1+delay)
	click(447,211)#点击新建文章

	#编辑标题
	sleep(0.5+delay)
	click(1155,228)#进入标题编辑区域
	pyperclip.copy(title)#复制标题到剪贴板
	hotkey('ctrl','a')#全选
	press('backspace')#删除原有文字
	hotkey('ctrl','v')#粘贴标题

	#编辑文章内容
	sleep(0.5+delay)
	click(1050,480)#进入编辑文章内容区域
	hotkey('ctrl','a')#全选
	press('backspace')#删除原有文字

	#编辑代码演示链接
	sleep(0.5+delay)
	pyperclip.copy(codeDemoDisplay)#复制链接显示文本
	typewrite('[')#链接显示文本标识符
	hotkey('ctrl','v')#粘贴文本
	typewrite(']')
	pyperclip.copy(codeDemoSite)#复制链接
	typewrite('(')#链接标识符
	hotkey('ctrl','v')#粘贴文本
	typewrite(')')
	sleep(0.5+delay)
	press('enter')#换行

	#编辑代码源码链接
	sleep(0.5+delay)
	pyperclip.copy(codeDisplay)#复制链接显示文本
	typewrite('[')#链接显示文本标识符
	hotkey('ctrl','v')#粘贴文本
	typewrite(']')
	pyperclip.copy(codeSite)#复制链接
	typewrite('(')#链接标识符
	hotkey('ctrl','v')#粘贴文本
	typewrite(')')
	sleep(0.5+delay)
	press('enter')#换行

	#编辑代码片段
	pyperclip.copy(codeLanguage)#复制代码语言到剪贴板
	typewrite('```')#代码片段标识符
	hotkey('ctrl','v')#粘贴
	press('enter')#换行
	sleep(0.5+delay)
	pyperclip.copy(codeFile)#复制代码文件到剪贴板
	hotkey('shift','alt','s')#选择文件快捷键
	hotkey('ctrl','v')#粘贴
	press('enter')#确认
	sleep(1.5+delay)
	click(930,420)
	hotkey('ctrl','a')#全选
	hotkey('ctrl','c')#复制
	sleep(0.5+delay)
	click(160,1060)#点击浏览器
	hotkey('ctrl','v')#粘贴
	hotkey('ctrl','end')#跳转到文本尾部
	press('enter')#换行
	typewrite('```')#代码片段标识符

	#发布
	sleep(2+delay)
	if mode=='upload':
		click(1850,292,duration=0.3)#点击发布
	elif mode=='test':
		click(1677,290)#取消

def uploadToBokeyuan(title,codeLanguage,codeFile,codeDemoDisplay,codeDemoSite,codeDisplay,codeSite,delay,mode):
	sleep(0.5+delay)
	click(1440,140)#点击个人网站
	click(1739,607,button='right')#选择简书上传文章页面
	click(1400,245)#在新页面打开
	hotkey('ctrl','pgdn')#切换到上传页面
	sleep(2.5+delay)

	#编辑标题
	sleep(0.5+delay)
	click(840,590)#进入标题编辑区域
	pyperclip.copy(title)#复制标题到剪贴板
	hotkey('ctrl','v')#粘贴标题

	#编辑文章内容
	sleep(0.5+delay)
	click(600,800)#进入编辑文章内容区域

	#编辑代码演示链接
	sleep(0.5+delay)
	pyperclip.copy(codeDemoDisplay)#复制链接显示文本
	typewrite('[')#链接显示文本标识符
	hotkey('ctrl','v')#粘贴文本
	typewrite(']')
	sleep(0.5+delay)
	pyperclip.copy(codeDemoSite)#复制链接
	typewrite('(')#链接标识符
	hotkey('ctrl','v')#粘贴文本
	typewrite(')')
	sleep(0.5+delay)
	press('enter')#换行

	#编辑代码源码链接
	sleep(0.5+delay)
	pyperclip.copy(codeDisplay)#复制链接显示文本
	typewrite('[')#链接显示文本标识符
	hotkey('ctrl','v')#粘贴文本
	typewrite(']')
	pyperclip.copy(codeSite)#复制链接
	typewrite('(')#链接标识符
	hotkey('ctrl','v')#粘贴文本
	typewrite(')')
	sleep(0.5+delay)
	press('enter')#换行

	#编辑代码片段
	pyperclip.copy(codeLanguage)#复制代码语言到剪贴板
	typewrite('```')#代码片段标识符
	hotkey('ctrl','v')#粘贴
	press('enter')#换行
	sleep(0.5+delay)
	pyperclip.copy(codeFile)#复制代码文件到剪贴板
	hotkey('shift','alt','s')#选择文件快捷键
	hotkey('ctrl','v')#粘贴
	press('enter')#确认
	sleep(1.5+delay)
	click(930,420)
	hotkey('ctrl','a')#全选
	hotkey('ctrl','c')#复制
	sleep(0.5+delay)
	click(160,1060)#点击浏览器
	hotkey('ctrl','v')#粘贴
	hotkey('ctrl','end')#跳转到文本尾部
	press('enter')#换行
	typewrite('```')#代码片段标识符
	sleep(1+delay)
	click(120,987)#退出编辑区域

	#发布
	sleep(1+delay)
	hotkey('ctrl','end')#转到网页尾部
	typewrite(['up','up'])#向上滚动2格
	click(817,211)#选择 PythonPrimaryProgram 分类
	typewrite(['down','down'])#向下滚动2格
	click(475,788)#编辑标签
	pyperclip.copy(codeLanguage)#复制代码语言到剪贴板
	hotkey('ctrl','v')#粘贴
	press('enter')#确认
	if mode=='upload':
		click(304,907)#点击发布
	elif mode=='test':
		click(478,848)#密码保护

def uploadVideo(mode='upload',delay=0):#上传文章所有步骤 mode 上传模式 delay 关键步骤操作延迟秒数
	#打开 ArticleConfig.txt 详细介绍和条件要求 在 ArticleConfig.txt
	with open('ArticleConfig.txt','r',encoding='utf-8')as f:#读取文章所有配置
		config = f.readlines()[1:6]
	title=config[0].split('=')[1].strip()
	codeLanguage=config[1].split('=')[1].strip()
	codeFile=config[2].split('=')[1].strip()
	codeDemoDisplay=config[3].split('=')[0].strip()
	codeDemoSite=config[3].split('=')[1].strip()
	codeDisplay=config[4].split('=')[0].strip()
	codeSite=config[4].split('=')[1].strip()

	#上传文章 缩放比例为90% 分辨率1920x1080 固定坐标 执行操作有延迟 相应点击坐标不能大幅度改变
	#打开Edge浏览器
	click(160,1060)
	sleep(2+delay)

	#切换输入法
	click(1802,1056)#点击输入法
	click(1720,885)#切换到美式键盘

	#上传文章到知乎
	uploadToZhihu(title,codeLanguage,codeFile,codeDemoDisplay,codeDemoSite,codeDisplay,codeSite,delay,mode)

	#上传文章到思否
	uploadToSifou(title,codeLanguage,codeFile,codeDemoDisplay,codeDemoSite,codeDisplay,codeSite,delay,mode)

	#上传文章到CSDN
	uploadToCSDN(title,codeLanguage,codeFile,codeDemoDisplay,codeDemoSite,codeDisplay,codeSite,delay,mode)

	#上传文章到简书
	uploadToJianshu(title,codeLanguage,codeFile,codeDemoDisplay,codeDemoSite,codeDisplay,codeSite,delay,mode)

	#上传文章到博客园
	uploadToBokeyuan(title,codeLanguage,codeFile,codeDemoDisplay,codeDemoSite,codeDisplay,codeSite,delay,mode)


FAILSAFE=True# 如果程序出错 鼠标移动到屏幕左上角 抛出 pyautogui.FailSafeException 异常 并停止程序
#使用之前 先配置 ArticleConfig.txt 且保证网络正常 确保浏览器打开的页面不超过1
uploadVideo(mode='upload',delay=0)
#mode:test 测试是否正常执行上传步骤 或 upload 上传文章 默认为upload
#delay:float 程序关键步骤执行延迟秒数 默认延迟0秒
